package Webshop;

import java.util.ArrayList;
import java.util.List;

import Exceptions.ArtikellagerLeerException;
import Exceptions.BestLeerException;
import Exceptions.BestPosLeerException;
import Exceptions.KeinKundeException;
import Exceptions.WaPosLeerException;


public class Webshop 
{
	private String name;
	private List<Kunde> kunden;
	private List<Bestellung> bestellungen;
	private List<Artikel> artikelAufLager;
	
	public Webshop(String name)
	{
		this.name = name;
		this.kunden = new ArrayList<Kunde>();
		this.artikelAufLager = new ArrayList<Artikel>();
		this.bestellungen = new ArrayList<Bestellung>();
	}
	
	public void registriereKunde(Kunde k)
	{
		kunden.add(k);
	}
	
	public Kunde gibRegistriertenUser(String email, String passwort) throws KeinKundeException
	{
		Kunde kunde = null;
		if(!this.kunden.isEmpty())
		{
			for(Kunde k : this.kunden)
			{
				if(k.getEmail().equals(email))
				{
					if(k.getPasswort().equals(passwort))
					{
						kunde = k;
					}
				}
			}
		}
		if(kunde == null)
			throw new KeinKundeException("Benutzername oder Passwort falsch");
		return kunde;
	}
	
	public void bestellen(Kunde k) throws WaPosLeerException
	{
		Bestellung b = new Bestellung(k);
		Warenkorb w = k.getWarenkorb();
		List<Warenkorbposition> wps = w.getWarenkorbpos();
		for(Warenkorbposition wp : wps)
		{
			for(Artikel a : this.artikelAufLager)
			{
				if(wp.getArtikel().equals(a))
				{
					Bestellposition bp = new Bestellposition(wp.getArtikel(),wp.getMenge());
					try
					{
						b.getBestellpositionen().add(bp);
					}
					catch(BestPosLeerException e)
					{
						List<Bestellposition> bps = new ArrayList<Bestellposition>();
						bps.add(bp);
						b.setBestellpositionen(bps);
					}
				}
			}
		}
		this.bestellungen.add(b);
		k.setWarenkorb(new Warenkorb(k));
	}
	
	public List<Bestellung> getBestellungenFuerKunden(Kunde k)
	{
		List<Bestellung> bestellungen = new ArrayList<Bestellung>();
		
		try
		{
			for(Bestellung best : this.getBestellungen())
			{
				if(k.equals(best.getKunde()))
				{
					best.ermittleGesamtpreis();
					bestellungen.add(best);
				}
			}
			
			return bestellungen;
		}
		
		catch(BestLeerException e)
		{
			System.out.println(e.getMessage());
		}
		return bestellungen;
	}
	
	public void addeArtikel(Artikel a)
	{
		artikelAufLager.add(a);
	}
	
	private Artikel getArtikelFuerSrtikelNr(int artikelNr)
	{
		Artikel a = null;
		try
		{
			for(Artikel ar : this.getArtikelAufLager())
			{
				if(ar.getArtikelNr() == artikelNr)
				{
					a = ar;
					break;
				}
			}
			return a;
		}
		catch(ArtikellagerLeerException e)
		{
			System.out.println(e.getMessage());
		}
		return a;
	}
	
	public void legeArtikelInWarenkorb(int artikelNr, int menge, Kunde k)
	{		
		Artikel a = getArtikelFuerSrtikelNr(artikelNr);
		boolean isdrin = false;
		if(a != null)
		{
			try
			{
				List<Warenkorbposition> wps = k.getWarenkorb().getWarenkorbpos();
				for(Warenkorbposition wp : wps)
				{
					if(wp.getArtikel().equals(a))
					{
						wp.setMenge(wp.getMenge() + menge);
						isdrin = true;
					}
				}
				
				if(!isdrin)
				{
					Warenkorbposition wpNew = new Warenkorbposition(a, menge);
					wps.add(wpNew);
				}
			}
			
			catch(WaPosLeerException e)
			{
				List<Warenkorbposition> wps = new ArrayList<Warenkorbposition>();
				Warenkorbposition wpNew = new Warenkorbposition(a, menge);
				wps.add(wpNew);
				k.getWarenkorb().setWarenkorbpos(wps);
				
			}
		}
	}
	
	public void loescheWp(int nr, Kunde k)
	{
		Warenkorb w = k.getWarenkorb();
		Warenkorbposition wp1 = null;
		try
		{
			List<Warenkorbposition> wps = w.getWarenkorbpos();
			if(!wps.isEmpty())
			{
				for(Warenkorbposition wp : wps)
				{
					if(wp.getPositionNr() == nr)
					{
					wp1 = wp;
					break;
					}
				}
			}
			if(wp1 != null)
			{
				wp1.setLetztPositionNr(wp1.getLetztPositionNr() - 1);
				wps.remove(wp1);
			}
		}
		catch(WaPosLeerException e)
		{
			System.out.println(e.getMessage());
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Kunde> getKunden() {
		return kunden;
	}

	public void setKunden(List<Kunde> kunden) {
		this.kunden = kunden;
	}

	public List<Bestellung> getBestellungen() throws BestLeerException {
		if(!bestellungen.isEmpty())
		{
			return bestellungen;
		}
		else
			throw new BestLeerException("Keine Bestellungen vorhanden");
	}

	public void setBestellungen(List<Bestellung> bestellungen) {
		this.bestellungen = bestellungen;
	}

	public List<Artikel> getArtikelAufLager() throws ArtikellagerLeerException
	{
		if(!artikelAufLager.isEmpty())
		{
			return artikelAufLager;
		}
		else
			throw new ArtikellagerLeerException("Es sind derzeit keine Artikel auf Lager"); 
	}

	public void setArtikelAufLager(List<Artikel> artikelAufLager) {
		this.artikelAufLager = artikelAufLager;
	}	
	
	
}
